#include<cstdio>
#include<algorithm>
const int D=200,N=1e5+2;
int c,i,j,k,t,n,m,w,f[502],r[502],h[502];
long long s,ans,x[N];
struct Z{
int a,b;
bool operator<(const Z&a)const{
return b<a.b;
}
}a[N];
int B(int i)
{
int j,k,L=(i-1)*D,R=std::min(m,i*D);
for(k=L+1,j=L;j++<R;x[k]<x[j]?k=j:0)x[j]+=1ll*j*f[i];
for(f[i]=0,h[i]=N,r[i]=j=k;j++<R;h[i]=std::min(1ll*h[i],(x[k]-x[j])/(j-k)));
}
int main()
{
for(scanf("%d%d",&n,&w);i++<n;m=m<a[i].a?a[i].a:m)
scanf("%d%d",&a[i].a,&a[i].b);
std::sort(a+1,a+n+1);
for(i=1;c<=a[n].b+1;++c)
{
for(;i<=n&&a[i].b<c;++i,ans=k=0,B(t))
{
for(j=0;++j*D<=a[i].a;++f[j],!h[j]--?B(j):0);
for(t=j,j=(j-1)*D;j++<a[i].a;x[j]+=j);
}
if(!k)for(j=0;j++*D<m;ans<s?ans=s,k=r[j]:0)s=x[r[j]]+1ll*f[j]*r[j];
printf("%lld %d\n",ans+1ll*c*w*(n-i+1),k);
}
}/*1692657872.6105003*/
1665C - Tree Infection | 1665D - GCD Guess |
29A - Spit Problem | 1097B - Petr and a Combination Lock |
92A - Chips | 1665B - Array Cloning Technique |
1665A - GCD vs LCM | 118D - Caesar's Legions |
1598A - Computer Game | 1605A - AM Deviation |
1461A - String Generation | 1585B - Array Eversion |
1661C - Water the Trees | 1459A - Red-Blue Shuffle |
1661B - Getting Zero | 1661A - Array Balancing |
1649B - Game of Ball Passing | 572A - Arrays |
1455A - Strange Functions | 1566B - MIN-MEX Cut |
678C - Joty and Chocolate | 1352E - Special Elements |
1520E - Arranging The Sheep | 1157E - Minimum Array |
1661D - Progressions Covering | 262A - Roma and Lucky Numbers |
1634B - Fortune Telling | 1358A - Park Lighting |
253C - Text Editor | 365B - The Fibonacci Segment |